/*
        日志消息类，主要封装一条日志所需的全部内容，包含如下：
        * 时间
        * 日志等级
        * 日志器名称
        * 线程id
        * 源文件名
        * 源文件行号
        * 日志主体消息
*/
#pragma once

#include <chrono>
#include <string>
#include <thread>

#include "LogLevel.hpp"


namespace mylog {
    struct LogMessage {
        std::chrono::system_clock::time_point m_ctime; // 存储日志消息的时间戳。
        LogLevel::Level m_level;                       // 存储日志的等级，使用了 LogLevel 类中定义的枚举类型。
        std::string m_logger;                          // 存储日志器的名称。
        std::thread::id m_tid;                         // 存储生成该日志消息的线程的 id。
        std::string m_file;                            // 存储产生该日志消息的源文件名称。
        size_t m_line;                                 // 存储产生该日志消息的源文件行号。
        std::string m_payload;                         // 存储日志的主体消息。

        LogMessage() {}
        LogMessage(LogLevel::Level level, const std::string& logger,
                const std::string& file, size_t line, const std::string& payload)
            : m_ctime(std::chrono::system_clock::now()), m_level(level),
            m_logger(logger), m_tid(std::this_thread::get_id()), m_file(file),
            m_line(line), m_payload(payload) {}
    };
} // namespace mylog